#ifndef XEGE_COLOR_H
#define XEGE_COLOR_H
#pragma once

#include "xege.h"
// #include "color.h"
// #include ""

namespace xege {

typedef uint32_t color_t;
typedef SDL_Color COLOR;
struct COLORF {
	float r, g, b, a;
};


namespace color {
	// struct COLOR     { uc r, g, b, a; };
	// struct RGBA { double r, g, b, a; };
	typedef SDL_Color RGBA;
	struct CMYK { double c, m, y, k; };
	struct HSL  { double h, s, l; };
	struct HSV  { double h, s, v; };

}

// RGB 转波长
// 波长转 RGB

#define XEGEGET_R(c) ( ((c)>>24) & 0xFF )
#define XEGEGET_G(c) ( ((c)>>16) & 0xFF )
#define XEGEGET_B(c) ( ((c)>> 8) & 0xFF )
#define XEGEGET_A(c) ( ((c)    ) & 0xFF )
// 颜色提取

// 合成 RGB 颜色
constexpr inline color_t XEGERGB (uc r, uc g, uc b) {
	return (r << 24 | g << 16 | b << 8 | 0xff );
}
// 合成 RGBA 颜色
constexpr inline color_t XEGERGBA (uc r, uc g, uc b, uc a) {
	return ( r << 24 | g << 16 | b << 8 | a);
}
// 合成 RGB 颜色（浮点数 [0, 1]）
constexpr inline color_t XEGERGBF (double r, double g, double b) {
	return XEGERGB (255*r, 255*g, 255*b);
}
// 合成 RGBA 颜色（浮点数 [0, 1]）
constexpr inline color_t XEGERGBAF (double r, double g, double b, double a) {
	return XEGERGBA (255*r, 255*g, 255*b, 255*a);
}
// 合成 CMYK 颜色（浮点数 [0, 1]）
constexpr inline color_t XEGECMYK (double c, double y, double m, double k) {
	return XEGERGBF ((1-c)*(1-k), (1-y)*(1-k), (1-m)*(1-k));
}
// RGB 转灰度图
constexpr inline color_t rgb2gray(color_t color) {
	return XEGERGB(0.299*XEGEGET_R (color), 0.287*XEGEGET_G (color), 0.114*XEGEGET_B (color));
}
// using RGB2GRAY = rgb2gray;

/*
inline color_t XEGEGET_C
inline color_t XEGEGET_Y
inline color_t XEGEGET_M
inline color_t XEGEGET_K

// 合成 hsl 颜色
// hUE（色相）、sATURATION（饱和度）、lIGHTNESS（亮度）
inline color_t XEGEHLS (double h, double s, double l) {
	double q, p, hk, tr, tg, tb,;
	if (l < 1/2) { q = l (1+s); }
	else { q = l + s-(l*s); }
	p = 2*l - 1;
}
// hUE（色相）、sATURATION（饱和度）、vALUE（色调）
inline color_t XEGEHSV (double h, double s, double v) {

}
*/
// RGB2HSV
// RGB2HSL
// HSL2RGB
// HSV2RGB








// COLOR!!

#define WHITE  0xffffffff
#define GRAY   0x7f7f7fff
#define BLACK  0x000000ff
#define RED    0xff0000ff
#define GREEN  0x00ff00ff
#define BLUE   0x0000ffff
#define YELLOW 0xffff00ff
#define PURPLE 0x00ffffff
#define CYAN   0xff00ffff

#define LIGHTPINK       0xffb6c1ff
#define PINK            0xffc0cbff
#define PINK2           0xFFAABBFF
#define CRIMSON         0xdc143cff
#define LAVENDERBLUSH   0xfff0f5FF
#define PALEVIOLETRED   0XDB9093FF
#define HOTPINK         0XFF69B4FF
#define DEEPPINK        0XFF1493FF
#define MEDIUMVIOLETRED 0XC71585FF
#define ORCHID          0XDA70D6FF
#define THISTLE         0XD8BFD8FF
#define PLUM            0XDDA0DDFF

// 中国传统颜色
/*
#define 浅粉色   LIGHTPINK      
#define 粉红     PINK           
#define 猩红     CRIMSON        
#define 淡紫红   LAVENDERBLUSH  
#define 热情的粉 PALEVIOLETRED  
#define 深粉红   HOTPINK        
#define 弱紫罗兰 DEEPPINK       
#define 中紫罗兰 MEDIUMVIOLETRED
#define 兰花紫   ORCHID         
#define 蓟       THISTLE        
#define 李子紫   PLUM           
*/



}  // 命名空间 xege 结尾
#endif